package com.itcam.cli;

import com.itcam.cli.command.GenerateCommand;
import com.itcam.cli.command.ListCommand;
import com.itcam.cli.command.ConfigCommand;
import com.itcam.cli.command.JsonGenerateCommand;
import picocli.CommandLine;
import picocli.CommandLine.Command;

/**
 * 命令执行器
 */
// 🚀【中央控制中心】指挥官模式启动！
@Command(name = "acm-template-pro-generator", mixinStandardHelpOptions = true) // 🛠️ 自带帮助手册生成器
public class CommandExecutor implements Runnable {
    // ============ 🏢【司令部架构】============
    // 🔑 使用组合模式搭建命令体系，类似公司组织架构：
    // CEO（主命令） -> 部门经理（子命令） -> 具体执行人员（业务逻辑）

    private final CommandLine commandLine; // 📡 命令调度中心

    // 🛠️【初始化区块】-> 类似装备武器库
    {
        commandLine = new CommandLine(this)
                .addSubcommand(new GenerateCommand())   // 🏭 生产部
                .addSubcommand(new ConfigCommand())    // ⚙️ 配置部
                .addSubcommand(new ListCommand())      // 📋 档案部
                .addSubcommand(new JsonGenerateCommand()); // 🎨 设计部
    }

    // ============ 🎮【指挥中心待机状态】============
    @Override
    public void run() {
        // 🌈 空命令友好提示（就像智能语音助手待机状态）
        System.out.println("请输入具体命令，或者输入 --help 查看命令提示");
        // 💡 优化建议：可以展示ASCII艺术字logo增加趣味性
    }

    // ============ ⚡【执行引擎】============
    /**
     * 任务分发枢纽（类似机场塔台调度）
     * @param args 指令参数 -> 航班号+目的地
     * @return 执行状态码 -> 航班状态报告
     */
    public Integer doExecute(String[] args) {
        // 🔑 关键流程：
        // 1️⃣ 指令解析（空管雷达扫描）
        // 2️⃣ 路由分发（分配停机位）
        // 3️⃣ 执行反馈（起降状态回报）
        return commandLine.execute(args);
    }
}
